package com.itheima.juc23.question4;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

/**
 * @author li
 * 抢红包
 */
public class MyThread extends Thread {
    // 定义共享数据
    // 100块，分成3个红包
    static BigDecimal money = BigDecimal.valueOf(100.0);
    static int count = 3;
    // 最小金额
    static final BigDecimal MIN = BigDecimal.valueOf(0.01);

    public MyThread() {
    }

    public MyThread(String name) {
        super(name);
    }

    @Override
    public void run() {
        // 同步代码块
        synchronized (MyThread.class) {
            if (count == 0) {
                // 判断，共享数据是否到末尾（已经到末尾）
                System.out.println(getName() + "没有抢到红包");
            } else {
                // 判断，共享数据是否到末尾（没有到末尾）
                // 不能直接随机，定义一个变量，表示中奖的金额
                BigDecimal prize;
                if (count == 1) {
                    // 表示这是最后一个红包，就不需要随机，剩下的钱都是中奖金额
                    prize = money;
                } else {
                    // 表示第一次或第二次
                    double bounds = money.subtract(BigDecimal.valueOf(count - 1).multiply(MIN)).doubleValue();
                    // 生成[0, bounds]之间的随机数
                    prize = BigDecimal.valueOf(ThreadLocalRandom.current().nextDouble(bounds + Double.MIN_VALUE));
                    if (prize.compareTo(MIN) < 0) {
                        prize = MIN;
                    }
                }
                // 从money当中去掉当前中奖的金额
                money = money.subtract(prize);
                // 红包个数-1
                count--;
                // 本次红包信息进行打印
                System.out.println(getName() + "抢到了" + prize.setScale(2, RoundingMode.HALF_DOWN) + "元");
            }
        }
    }
}
